home *** CD-ROM | disk | FTP | other *** search
/ The Utilities Experience / The Utilities Experience - Volume 1.iso / software / comms / thor_2.22 / thor.lha / rexx / ForwardMsg.thor < prev    next >
Text File  |  1995-12-18  |  6KB  |  274 lines

  1. /* $VER: ForwardMsg.thor 3.1 (17.11.94)
  2. **
  3. ** Arexx script to forward messages from a user to another user.
  4. **
  5. ** Must be started from THOR.
  6. **
  7. ** Script by: Petter Nilsen, Ultima Thule Software.
  8. **/
  9.  
  10. options results
  11.  
  12. EVE_ENTERMSG     =  0   /* Enter message */
  13.  
  14. thorport = address()
  15.  
  16. if ~show('p', 'BBSREAD') then do
  17.     address command
  18.         "run >nil: `GetEnv THOR/THORPath`bin/LoadBBSRead"
  19.         "WaitForPort BBSREAD"
  20. end
  21.  
  22. address(thorport)
  23.  
  24. CURRENTMSG stem MSG
  25. if(rc ~= 0) then
  26. do
  27.     REQUESTNOTIFY TEXT '"No current message."' BT '"_Ok"'
  28.     exit
  29. end
  30.  
  31. REQUESTNOTIFY TEXT '"Forward to the same system and conference ?"' BT '" _Yes | _No "'
  32. if(rc ~= 0) then
  33. do
  34.     say THOR.LASTERROR
  35.     exit
  36. end
  37.  
  38. if(result = 0) then 
  39. do
  40.     address BBSREAD GETBBSLIST stem BBSLIST
  41.     if(rc ~= 0) then goto quit
  42.  
  43.     REQUESTLIST instem BBSLIST title '"Select system to forward to:"'
  44.     if(rc ~= 0) then 
  45.     do
  46.         if(rc ~= 5) then address(thorport) REQUESTNOTIFY TEXT '"'THOR.LASTERROR'"' BT '"_Ok"'
  47.         exit
  48.     end
  49.  
  50.     bbs = result
  51.  
  52.     address BBSREAD GETCONFLIST bbsname '"'bbs'"' stem CONFLIST
  53.     if(rc ~= 0) then goto quit
  54.  
  55.     REQUESTLIST instem CONFLIST title '"Select Conference:"'
  56.     if(rc ~= 0) then 
  57.     do
  58.         if(rc ~= 5) then address(thorport) REQUESTNOTIFY TEXT '"'THOR.LASTERROR'"' BT '"_Ok"'
  59.         exit
  60.     end
  61.     conf = result
  62.     other = 1
  63. end
  64. else
  65. do
  66.     other = 0
  67.     bbs = MSG.BBSNAME
  68.     conf = MSG.CONFNAME
  69. end
  70.  
  71. /* Let's ask for a user name.. */
  72.  
  73. do forever
  74.     REQUESTSTRING TITLE '"Enter username to forward to:"' BT '" _Ok | _Cancel "' MAXCHARS 200
  75.     if(rc ~= 0) then exit
  76.     forwardto = result
  77.  
  78.  
  79.     if(upper(forwardto) ~= "ALL") then
  80.     do
  81.         address(bbsread)
  82.  
  83.         /*
  84.             The message was not addressed to 'ALL', 
  85.             let's search for the user on the system
  86.             the message is to be forwarded to. 
  87.             Both name, addresses and aliases will be searched 
  88.             for to find a match.
  89.         */
  90.  
  91.         SEARCHBRUSER bbsname '"'bbs'"' stem USERS search '"'forwardto'"' name address alias suggestusersstem SUG
  92.         if(rc ~= 0) then goto quit
  93.  
  94.         if(result > 0) then
  95.         do
  96.             /* Ok, we found one or more users matching the data entered exactly */
  97.  
  98.             address(bbsread)
  99.  
  100.             drop LIST.
  101.             drop USERTAGS.
  102.  
  103.             LIST.COUNT = USERS.COUNT
  104.  
  105.             /*
  106.                 We must build a list of user names suitable to 
  107.                 be viewed with the REQUESTLIST command.
  108.             */
  109.  
  110.             do n = 1 to USERS.COUNT
  111.                 LIST.n.USERNR = USERS.n.USERNR
  112.                 READBRUSER bbsname '"'bbs'"' usernr USERS.n.USERNR tagsstem USERTAGS
  113.                 if(rc ~= 0) then goto quit
  114.                 LIST.n = USERTAGS.NAME
  115.  
  116.                 if(symbol("USERTAGS.ADDRESS") = "VAR") then 
  117.                     LIST.n.ADDRESS = USERTAGS.ADDRESS
  118.             end
  119.  
  120.             /* Select a user */
  121.  
  122.             address(thorport)
  123.             REQUESTLIST instem LIST title '"Select user:"'
  124.             if(rc ~= 0) then 
  125.             do
  126.                 if(rc ~= 5) then REQUESTNOTIFY TEXT '"'THOR.LASTERROR'"' BT '"_Ok"'
  127.                 exit
  128.             end
  129.  
  130.             forwardto = result
  131.  
  132.             /* We might have an address (email address/Fido address etc.) */
  133.  
  134.             do n = 1 to LIST.COUNT
  135.                 if(LIST.n = forwardto) then
  136.                     forwardaddress = LIST.n.ADDRESS
  137.             end
  138.             leave
  139.         end
  140.         else
  141.         do
  142.             /*
  143.                 No users matching the given data exactly were found,
  144.                 let's prosess the suggestions.
  145.             */
  146.  
  147.             if(symbol("SUG.COUNT") = "VAR") then do
  148.                 address(thorport)
  149.                 REQUESTLIST instem SUG title '"Select user:"'
  150.                 if(rc ~= 0) then 
  151.                 do
  152.                     if(rc ~= 5) then REQUESTNOTIFY TEXT '"'THOR.LASTERROR'"' BT '"_Ok"'
  153.                     exit
  154.                 end
  155.  
  156.                 forwardto = result
  157.  
  158.                 /* Let's find the user number of the user selected */
  159.  
  160.                 do n = 1 to SUG.COUNT
  161.                     if(SUG.n = forwardto) then
  162.                         usernumber = SUG.n.USERNR
  163.                 end
  164.  
  165.                 drop USERTAGS.
  166.  
  167.                 address(bbsread)
  168.  
  169.                 /* Get some data about the user selected */
  170.  
  171.                 READBRUSER bbsname '"'bbs'"' usernr usernumber tagsstem USERTAGS
  172.                 if(rc ~= 0) then goto quit
  173.  
  174.                 if(symbol("USERTAGS.ADDRESS") = "VAR") then 
  175.                     forwardaddress = USERTAGS.ADDRESS
  176.  
  177.                 leave
  178.             end
  179.             else
  180.             do
  181.                 /* No users were found in the search */
  182.  
  183.                 address(thorport)
  184.                 REQUESTNOTIFY TEXT '"No matching users found, try again?"' BT '"_Ok | _Cancel"'
  185.                 if(rc ~= 0) then exit
  186.                 if(result = 0) then exit
  187.             end
  188.         end
  189.     end
  190.     else
  191.         leave
  192. end
  193.  
  194. address(bbsread)
  195.  
  196. /* Get a unique message for the event */
  197.  
  198. UNIQUEMSGFILE bbsname '"'bbs'"' stem UNIQUEFILE
  199. if(rc ~= 0) then goto quit
  200.  
  201. /* Read the data on the message that is to be forwarded */
  202.  
  203. READBRMESSAGE bbsname '"'MSG.BBSNAME'"' confname '"'MSG.CONFNAME'"' msgnr MSG.MSGNR headstem HEADTAGS textstem TEXTTAGS 
  204. if(rc ~= 0) then goto quit
  205.  
  206. if(~open(fh, UNIQUEFILE.NAME, 'A')) then 
  207. do
  208.     address(thorport)
  209.     REQUESTNOTIFY TEXT '"Unable to open file:' UNIQUEFILE.NAME '"' BT '"_Ok"'
  210.     exit
  211. end
  212.  
  213. /* Build the forwarded message */
  214.  
  215. msgfrom = HEADTAGS.FROMNAME
  216. msgto = ''
  217. if(symbol("HEADTAGS.TONAME") = "VAR") then msgto = HEADTAGS.TONAME
  218. if(symbol("HEADTAGS.TOADDR") = "VAR") then msgto = msgto || ' <' || HEADTAGS.TOADDR || '>'
  219. if(symbol("HEADTAGS.FROMADDR") = "VAR") then msgfrom = msgfrom || ' <' || HEADTAGS.FROMADDR || '>'
  220. call writeln(fh, '--------- START OF FORWARDED MESSAGE ---------')
  221. call writeln(fh, '')
  222.  
  223. if(other = 1) then 
  224. do
  225.     call writeln(fh, 'From System ....: ' || MSG.BBSNAME)
  226.     call writeln(fh, 'From Conference : ' || MSG.CONFNAME)
  227. end
  228.  
  229. if(symbol("HEADTAGS.ORGINALNR") = "VAR") then do 
  230.     call writeln(fh, 'MessageNr ......: ' || HEADTAGS.ORGINALNR)
  231. end
  232. if(symbol("HEADTAGS.MSGID") = "VAR") then do 
  233.     call writeln(fh, 'MessageID ......: '|| HEADTAGS.MSGID)
  234. end
  235.  
  236. call writeln(fh, 'Originally from : ' || msgfrom)
  237. if(msgto ~= '') then do
  238.     call writeln(fh, 'Originally to ..: ' || msgto)
  239. end
  240. call writeln(fh, 'Subject ........: ' || HEADTAGS.SUBJECT || '0a'x)
  241.  
  242. do n=1 to TEXTTAGS.TEXT.COUNT
  243.     call writeln(fh, TEXTTAGS.TEXT.n)
  244. end
  245. call writeln(fh, '')
  246. call writeln(fh, '---------- END OF FORWARDED MESSAGE ----------')
  247.  
  248. call close(fh)
  249.  
  250. /* Post it */
  251.  
  252. drop EVENT.
  253.  
  254. EVENT.SUBJECT = 'FWD: '||HEADTAGS.SUBJECT
  255. EVENT.TONAME = forwardto
  256. EVENT.TOADDR = forwardaddress
  257. EVENT.CONFERENCE = conf
  258. EVENT.MSGFILE = UNIQUEFILE.FILEPART
  259.  
  260. WRITEBREVENT bbsname '"'bbs'"' event EVE_ENTERMSG stem EVENT
  261. if(rc ~= 0) then goto quit
  262.  
  263. address(thorport)
  264.  
  265. if(bbs ~= MSG.BBSNAME) then
  266.     PACKEVENTS '"'bbs'"'
  267.  
  268. exit
  269.  
  270. quit:
  271.     address(thorport)
  272.     REQUESTNOTIFY TEXT '"'BBSREAD.LASTERROR'"' BT '"_Ok"'
  273.     exit
  274.